import java.util.HashMap;

/**
 * @author hewei
 * @version 1.0
 * @description: 周赛318 t2
 * @date 2022/11/6 10:34
 */

public class MaximumSubarraySum {

    public long maximumSubarraySum(int[] nums, int k) {
        HashMap<Integer, Integer> map = new HashMap<>();
        long sum = 0;
        for (int i = 0; i < k; i++) {
            sum += nums[i];
            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
        }
        long ans = 0;
        if (map.size() == k) ans = sum;
        int l = 0, r = k;
        while (r < nums.length) {
            map.put(nums[l], map.get(nums[l]) - 1);
            if (map.get(nums[l]) == 0) {
                map.remove(nums[l]);
            }
            map.put(nums[r], map.getOrDefault(nums[r], 0) + 1);
            sum -= nums[l++];
            sum += nums[r++];
            if (map.size() == k) ans = Math.max(ans, sum);
        }
        return ans;
    }
}
